package main

import "fmt"

func main() {
	// 初始化 Person 结构体
	person := Person{
		Name: "张佳伟", // 姓名字段，string 类型
		age:  5,     // 年龄字段，int 类型（注意：age 是非导出字段，只能在本包内访问）
		call: func() { // 函数字段，类型为 func()
			fmt.Println("调用了 call 方法")
		},
		Map: map[string]string{ // Map 字段，类型为 map[string]string,map[string]string 在 Go 语言中对应于 Java 里的 HashMap<String, String>。
			"key1": "value1",
			"key2": "value2",
		},
		Ptr: new(int), // 指针字段，类型为 *int，这里分配了一个 int 指针
	}
	fmt.Println(person) // 打印 person 结构体

	custom := Custom{field1: 1, field2: 2, field3: 3}

	fmt.Println(custom)

	//匿名结构体，可以定义结构，不给名称
	anon := struct {
		ID   int
		Name string
	}{
		ID:   1001,
		Name: "匿名结构体示例",
	}
	fmt.Println(anon)

	//调用func
	test_struct()
}

// 在 Go 中最常用的方法使用 type 和 struct 关键字定义一个结构体，结构体中的字段都有不同的名字，并且字段可以是任意类型，比如结构体本身、指针甚至是函数
type Person struct {
	Name string
	age  int
	call func()
	Map  map[string]string
	Ptr  *int
}

type Custom struct {
	field1, field2, field3 byte
}

// 匿名结构体，可以定义结构，不给名称,可以定义在func里，适合用来做临时数据结构
func test_struct() {
	var anon = struct {
		filed string
		value string
	}{"zjw", "666"}
	fmt.Println(anon)

}
